package com.biallen.datastructure.linkedlist;

import com.biallen.datastructure.entity.HeroNode2;

public class DoubleLinkedList {

    private HeroNode2 headNode = new HeroNode2(0,"","");

    /**
     * 双向链表增加
     * @param node
     */
    public  void add(HeroNode2 node){

        if(node ==null){
            return;
        }
        HeroNode2 temp = headNode;
        while (temp!=null){
            if(temp.next==null){
                temp.next=node;
                node.pre=temp;
                break;
            }
            temp=temp.next;
        }
    }


//    public void add(HeroNode2 heroNode) {
//        // 因为 head 节点不能动，因此我们需要一个辅助遍历temp
//        HeroNode2 temp = headNode;
//        // 遍历链表，找到最后
//        while (true) {
//            // 找到链表的最后
//            if (temp.next == null)
//            {
//                break;
//                // 如果没有找到最后, 将将 temp 后移
//            }
//            temp = temp.next;
//        }
//        // 当退出 while 循环时，temp 就指向了链表的最后 // 形成一个双向链表
//        temp.next = heroNode;
//        heroNode.pre = temp;
//    }

    /**
     * 双向链表修改
     * @param node
     * @return
     */
    public  boolean update(HeroNode2 node){
        HeroNode2 tempNode = headNode;
        boolean success = false;
        while (tempNode!=null){
            if(tempNode.getNo()==node.getNo()){
                success= true;
                break;
            }
            tempNode = node.next;
        }

        if(success){
            tempNode.setName(node.getName());
            tempNode.setNickName(node.getNickName());
            return  true;
        }
        return  false;
    }

    /**
     * 双向链表删除
     * @param node
     * @return
     */
    public  boolean delNode(HeroNode2 node){
        HeroNode2 tempNode = headNode;
        boolean success = false;
        while (tempNode!=null){
            if(tempNode.getNo()==node.getNo()){
                tempNode.pre.next=tempNode.next;
                if(tempNode.next!=null){
                    tempNode.next.pre=tempNode.pre;
                }
                success= true;
                break;
            }
            tempNode = tempNode.next;
        }

        return  success;

    }



    public  void  showList(){
        HeroNode2 node = headNode;
        while (node!=null){
            System.out.println(node);
            node= node.next;
        }
    }
}
